package com.atguigu.yygh.oss.service.Impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.atguigu.yygh.oss.service.FileService;
import com.atguigu.yygh.oss.utils.ConstantOssPropertiesUtils;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @author haustsusu
 * @create 2023-05-05-20:02
 */
@Service
public class FileServiceImpl implements FileService {
    @Override
    public String upload(MultipartFile file) {

        // Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。
        String endpoint = ConstantOssPropertiesUtils.ENDPOINT;
        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret =ConstantOssPropertiesUtils.SECRECT;
        // 填写Bucket名称，例如examplebucket。
        String bucketName = ConstantOssPropertiesUtils.BUCKET;


        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);


        //上传文件流
        InputStream inputStream=null;
        try {
            inputStream=file.getInputStream();
            String fileName=file.getOriginalFilename();


            //生成随机唯一值 ,使用uuid,添加到文件名称中去
            //将-替换掉
            String uuid = UUID.randomUUID().toString().replace("-", "");
            //fileName=**.jpg,注意将uuid加在fileName之前
            fileName=uuid+fileName;

            //按照当前日期,创建文件夹,上传到创建文件夹里面
            //   /2023/05/01  **.jpg
            String NowDate = new DateTime().toString("yyyy/MMdd");
            fileName=NowDate+"/"+fileName;


            //调用方法实现上传
            //  /2023/05/06/64b3432bf4f24f07b0ea499ee7b2aafeleft_stick.png" 无效
            //Object名称在使用UTF-8编码后长度必须在 1-1023字节之间，而且不能包含回车、换行、以及xml1.0不支持的字符，同时也不能以“/”或者“\”开头。
            ossClient.putObject(bucketName,fileName,inputStream);

            //关闭OSSClint
            ossClient.shutdown();

            //https://ghyy-haust.oss-cn-beijing.aliyuncs.com/chou.jpg
            String url="https://"+bucketName+"."+endpoint+"/"+fileName;
            //输出url的路径
            System.out.println(url);


            //返回url
            return url;


        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

    }
    //获取上传的文件
}
